package agenda.servlet;

import bean.Evento;
import bean.Usuario;
import dao.EventoDAO;
import dao.UsuarioDAO;
import java.io.IOException;
import java.sql.Connection;
import java.sql.Date;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author luis
 */
public class EventoController {

    private HttpServletRequest req;
    private HttpServletResponse resp;
    private Connection conn;

    public EventoController(HttpServletRequest req, HttpServletResponse resp, Connection conn) {
        this.req = req;
        this.resp = resp;
        this.conn = conn;
    }

    public void processo() throws ServletException, IOException, SQLException, ParseException {
        String acaoCRUD = req.getParameter("acaoCRUD");

        if ("salvar".equals(acaoCRUD)) {
            this.salvar();
        } else if ("carregar".equals(acaoCRUD)) {
            this.carregar();
        } else if ("excluir".equals(acaoCRUD)) {
            this.excluir();
        }
        listaTodos();
        //RequestDispatcher dispatcher = req.getRequestDispatcher("formevento.jsp");
        //dispatcher.forward(req, resp);
    }

    private void salvar() throws ServletException, IOException, SQLException, ParseException {
        //aqui alterar para salvar um evento
        //descricao, dt, e codusr
        String login = req.getParameter("login");
        String descricao = req.getParameter("descricao");
        String dt = req.getParameter("data");
        UsuarioDAO usrDao = new UsuarioDAO(conn);
        Usuario usuario = usrDao.procuraLogin(login);
        Evento evt = new Evento();
        evt.setDescricao(descricao);
        
        SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
        java.sql.Date data = new java.sql.Date(format.parse(dt).getTime());
        evt.setDt(data);
        evt.setCodusr(usuario);
        
        int codigo = 0;
        try {
            codigo = Integer.parseInt(req.getParameter("txtCodigo"));
        } catch (NumberFormatException ex) {
        } catch (NullPointerException ex) {
        }
        EventoDAO evtDAO = new EventoDAO(conn);
        try {
            if (codigo == 0) {
                evtDAO.create(evt);
                System.out.println("Entrou");
            } else {
                evt.setCod(codigo);
                evtDAO.update(evt);
            }
        } catch (Exception ex) {
            Principal.dispatcherErro(req, resp, String.format("Não foi possível inserir Evento.[%s]", ex.getMessage()));
            return;
        }
    }

    private void carregar() throws ServletException, IOException {

        int codigo = 0;
        try {
            codigo = Integer.parseInt(req.getParameter("txtCodigo"));
        } catch (NumberFormatException ex) {
        } catch (NullPointerException ex) {
        }
        EventoDAO evtDAO = new EventoDAO(conn);
        try {
            if (codigo > 0) {
              Evento evt = new Evento(codigo);
              evt = evtDAO.retrieve(evt);
              req.setAttribute("evento", evt);
            }
        } catch (Exception ex) {
            Principal.dispatcherErro(req, resp, String.format("Não foi possível ler Evento.[%s]", ex.getMessage()));
            return;
        }

    }

    private void excluir() throws ServletException, IOException {
        int codigo = 0;
        try {
            codigo = Integer.parseInt(req.getParameter("txtCodigo"));
        } catch (NumberFormatException ex) {
        } catch (NullPointerException ex) {
        }
        EventoDAO evtDAO = new EventoDAO(conn);
        try {
            if (codigo > 0) {
              //passar codigo,descricao,data  
     //         Evento evt = new Evento(codigo, req.getParameter("txtDescricao"), req.getParameter("txtLocalizacao"));
     //         evtDAO.delete(evt);
            }
        } catch (Exception ex) {
            Principal.dispatcherErro(req, resp, String.format("Não foi possível excluir evento.[%s]", ex.getMessage()));
            return;
        }
    }

    private void listaTodos() throws ServletException, IOException, SQLException {
        EventoDAO evtDAO = new EventoDAO(conn);
       req.setAttribute("evento", evtDAO.listaTodos());
    }
}
